📝 Резюме · 📄 Оригинал (923 B)
https://t.me/Python_libr/3360
Боты для Discord на Python — проект для начинающих
Источник: https://t.me/Python_libr/3360
Что могут делать Discord боты?
Discord боты — это автоматизированные приложения, взаимодействующие с пользователями серверов Discord. Типичные функции:
- Музыкальные боты: поиск и воспроизведение музыки из YouTube
- Генераторы контента: создание мемов, шуток, рандомных картинок
- Боты общения: ответы на сообщения, обучаемые чатботы
- Модерация: удаление спама, управление пользователями
- Игры: карточные игры, викторины, рулетки
Установка и начало работы
Требуемые библиотеки
pip install discord.py python-dotenv
Создание простого бота
import discord
from discord.ext import commands
import os
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
# Создание клиента с префиксом команд
bot = commands.Bot(command_prefix='!', intents=discord.Intents.default())
@bot.event
async def on_ready():
print(f'{bot.user} успешно подключен!')
@bot.command(name='привет')
async def hello(ctx):
"""Простая команда приветствия"""
await ctx.send(f'Привет, {ctx.author.mention}! 👋')
@bot.command(name='информация')
async def info(ctx):
"""Показывает информацию о боте"""
embed = discord.Embed(
title="О боте",
description="Простой Discord бот на Python",
color=discord.Color.blue()
)
embed.add_field(name="Автор", value="Python Libr")
embed.add_field(name="Версия", value="1.0")
await ctx.send(embed=embed)
bot.run(TOKEN)
Переменные окружения (.env файл)
DISCORD_TOKEN=your_bot_token_here
Основные компоненты архитектуры
graph TD
A["Discord API"] --> B["discord.py<br/>библиотека"]
B --> C["Bot класс"]
C --> D{События}
D --> E["on_ready"]
D --> F["on_message"]
D --> F2["on_member_join"]
C --> G{Команды}
G --> H["@bot.command"]
G --> I["@bot.event"]
Обработка событий
@bot.event
async def on_message(message):
"""Срабатывает на каждое сообщение"""
# Избегаем обработки сообщений самого бота
if message.author == bot.user:
return
if message.content == 'привет':
await message.channel.send(f'Привет, {message.author.name}!')
# Обработать команды
await bot.process_commands(message)
@bot.event
async def on_member_join(member):
"""Срабатывает, когда новый пользователь присоединяется"""
channel = member.guild.system_channel
if channel:
await channel.send(f'Добро пожаловать, {member.mention}!')
@bot.event
async def on_command_error(ctx, error):
"""Обработка ошибок команд"""
if isinstance(error, commands.CommandNotFound):
await ctx.send('❌ Команда не найдена')
else:
await ctx.send(f'Ошибка: {error}')
Мощные команды с параметрами
@bot.command(name='рассчитать')
async def calculate(ctx, число1: int, число2: int, операция: str):
"""Калькулятор: !рассчитать 5 3 +"""
операции = {
'+': число1 + число2,
'-': число1 - число2,
'*': число1 * число2,
'/': число1 / число2 if число2 != 0 else 'Деление на ноль!'
}
результат = операции.get(операция, 'Неизвестная операция')
await ctx.send(f'Результат: {число1} {операция} {число2} = {результат}')
@bot.command(name='описание')
async def describe(ctx, пользователь: discord.Member = None):
"""Информация о пользователе"""
пользователь = пользователь or ctx.author
embed = discord.Embed(title=f"Информация о {пользователь.name}")
embed.add_field(name="ID", value=пользователь.id, inline=False)
embed.add_field(name="Создан", value=пользователь.created_at)
embed.set_thumbnail(url=пользователь.avatar.url)
await ctx.send(embed=embed)
Развертывание и лучшие практики
- Безопасность: никогда не коммитьте токены в GitHub — используйте
.envфайлы - Масштабируемость: организуйте код в Cogs (расширения)
- Тестирование: используйте отдельный тестовый сервер Discord
- Логирование: ведите логи всех событий
- Документация: комментируйте все функции для будущего расширения
Полезные ресурсы
- Официальная документация discord.py
- Реестр ботов Discord для публикации вашего бота
- Сообщества разработчиков для помощи и советов